home *** CD-ROM | disk | FTP | other *** search
- #include <WM.h>
- #include <MyStructs.h>
-
- extern struct NewWindow WWindow,SWindow,MenuWindow,ItemWindow;
- extern struct NewWindow IWindow,BWindow,IMWindow,GWindow,MSWindow;
- extern struct NewWindow PRWindow,AlertWindow,REQWindow,AREQWindow;
- extern ULONG gflags;
- extern struct Image LOGOImage,WMImage;
-
- /* Hauptprogramm */
-
- _main()
- {
- ReqProc=(struct Process *)FindTask(0L);
- ReqProc->pr_Task.tc_UserData=ReqProc->pr_WindowPtr;
- ReqProc->pr_WindowPtr=(APTR)-1;
-
- if(!(IntuitionBase = (struct IntuitionBase *)
- OpenLibrary("intuition.library", 0)))
- {
- CloseAll();
- return(1);
- }
-
- if(!(GfxBase = (struct GfxBase *)
- OpenLibrary("graphics.library", 0)))
- {
- CloseAll();
- return(2);
- }
-
- if(!(LayersBase = (struct LayersBase *)
- OpenLibrary("layers.library", 0)))
- {
- CloseAll();
- return(2);
- }
- ok=1;
- PREFSBYTE[0]=0;
- if(!(Datei=Open("WM_Prefs",MODE_OLDFILE))) ok=0;
- else
- {
- if(read=Read(Datei,PREFSBYTE,sizeof(PREFSBYTE)) !=
- sizeof(PREFSBYTE)) ok=0;
- if(read=Read(Datei,WMColors,sizeof(WMColors)) !=
- sizeof(WMColors)) ok=0;
- Close(Datei);
- }
- if(ok) NewPrefs();
- if(GfxBase->DisplayFlags != NTSC)
- {
- WMScreen.Height=256;
- WMWindow.Height=245;
- FWindow.TopEdge=28;
- FWindow.Height=200;
- ErrWindow.TopEdge=103;
- SWindow.TopEdge=33;
- WWindow.TopEdge=31;
- IWindow.TopEdge=56;
- BWindow.TopEdge=43;
- IMWindow.TopEdge=71;
- GWindow.TopEdge=28;
- GWindow.Height=200;
- MenuWindow.TopEdge=26;
- ItemWindow.TopEdge=26;
- MenuWindow.Height=204;
- ItemWindow.Height=204;
- MSWindow.TopEdge=46;
- PRWindow.TopEdge=43;
- AlertWindow.TopEdge=78;
- REQWindow.TopEdge=48;
- AREQWindow.TopEdge=55;
- }
- if(!(WMsc=(struct Screen *)OpenScreen(&WMScreen)))
- {
- CloseAll();
- return(3);
- }
- WMWindow.Screen=WMsc;
- sc=WMsc;
- WMvp=WMsc->ViewPort;
- LoadRGB4(&WMvp,WMColors,4);
- if(!(WMwin = (struct Window *)OpenWindow(&WMWindow)))
- {
- CloseAll();
- return(4);
- }
- Copyright();
- if(!(StdFont=(struct TextFont *)OpenFont(&ZS8)))
- {
- CloseAll();
- return(5);
- }
- if(!(timerport=CreatePort(PORTNAME,0)))
- {
- CloseAll();
- return(6);
- }
- if(OpenDevice(TIMERNAME,UNIT_VBLANK,&timereq,0))
- {
- CloseAll();
- return(7);
- }
- TimerStart();
- suffix++;
- do
- {
- if(awin) SetWD();
-
- waitmask = Wait((1L << WMwin->UserPort->mp_SigBit) |
- (1L << timerport->mp_SigBit) );
- if(waitmask & (1L << timerport->mp_SigBit))
- {
- if(WMwin != NULL && IntuitionBase->ActiveWindow != WMwin)
- {
- ok=1;
- helpS=firstS;
- while(helpS)
- {
- if(TestWin(helpS->FirstWindow,IntuitionBase->ActiveWindow))
- {
- ok=0;
- break;
- }
- helpS=helpS->NextScreen;
- }
- if(ok) TestWin(noscW,IntuitionBase->ActiveWindow);
- }
- TimerStart();
- }
- if(waitmask & (1L << WMwin->UserPort->mp_SigBit)) {
- while(WMmsg=(struct IntuiMessage*)GetMsg(WMwin->UserPort))
- {
- class=WMmsg->Class;
- code=WMmsg->Code;
- move=0;
- if(class==MENUVERIFY)
- {
- if(WMsc->TopEdge) MoveScreen(WMsc,0,-(WMsc->TopEdge));
- ScreenToFront(WMsc);
- move=1;
- }
- ReplyMsg((struct Message *)WMmsg);
- if(class==MENUPICK && MENUNUM(code) != MENUNULL)
- DoMenu();
- if(move) ScreenToFront(sc);
- } /* while */
- } /* if */
- } while(EndeWM); /* do */
- CloseAll();
- return(0);
- } /* main */
-
- VOID WMOn()
- {
- WMwin=(struct Window *)OpenWindow(&WMWindow);
- Copyright();
- WindowToBack(WMwin);
- }
- VOID Copyright()
- {
- WMrp=WMwin->RPort;
- WinBorder(WMwin);
- i = (WMsc->Height == 256) ? 35 : 15;
- DrawImage(WMrp,&WMImage,180,i);
- text(WMrp,2,"Copyright 1990/91 by",237,i+125);
- text(WMrp,1,"Copyright 1990/91 by",235,i+124);
- text(WMrp,2,"Arno Pichler",269,i+135);
- text(WMrp,3,"Arno Pichler",267,i+134);
- text(WMrp,2,"Fritz-Schaeffer-Str. 8",229,i+145);
- text(WMrp,3,"Fritz-Schaeffer-Str. 8",227,i+144);
- text(WMrp,2,"W-8201 Ostermuenchen",237,i+155);
- text(WMrp,3,"W-8201 Ostermuenchen",235,i+154);
- SetMenuStrip(WMwin,&WMMenu6);
- }
- VOID DoMenu()
- {
- switch(MENUNUM(code))
- {
- /* Menu ALERT */
- case 7: switch(ITEMNUM(code))
- {
- case 0: if(sc==WMsc)
- {
- if(NewWin(3)) Error(0,1,1);
- else SaveOk=1;
- }
- break;
- case 1: /* DefAlert */
- if(DefAlert()) Error(0,1,1);
- break;
- case 2: /* AlertText */
- if(DefText(0)) Error(0,1,1);
- break;
- }
- break;
- /* Menu AUTO-REQUEST */
- case 6: switch(ITEMNUM(code))
- {
- case 0: if(NewWin(2))
- {
- Error(0,1,1);
- break;
- }
- SaveOk=1;
- break;
- case 1: /* DefAutoReq */
- if(DefAutoReq()) Error(0,1,1);
- break;
- case 2: /* BodyText */
- if(DefText(0)) Error(0,1,1);
- break;
- case 3: /* PositiveText */
- agad=awin->FirstGadget->NextGadget;
- if(DefText(1)) Error(0,1,1);
- break;
- case 4: /* NegativeText */
- agad=awin->FirstGadget;
- if(DefText(1)) Error(0,1,1);
- break;
- }
- break;
- /* Menu REQUESTER */
- case 5: switch(ITEMNUM(code))
- {
- case 0: if(NewWin(1)) Error(0,1,1);
- else SaveOk=1;
- break;
- case 1: if(NewReqDef()) Error(0,1,1);
- break;
- case 2: /* ReqBorder */
- BType=2;
- if(NewBorDef()) Error(0,1,1);
- break;
- case 3: /* ReqText */
- if(DefText(0)) Error(0,1,1);
- break;
- case 4: /* ReqBitMap */
- DefImage(7);
- break;
- }
- break;
- /* Menu GADGET */
- case 4: switch(ITEMNUM(code))
- {
- case 0: DrawGad();
- break;
- case 1: if(NewGadDef()) Error(0,1,1);
- break;
- case 2: if(MoveGadget(1)) Error(0,1,1);
- break;
- case 3: if(MoveGadget(0)) Error(0,1,1);
- break;
- case 4: if(SearchGad()) break;
- if(agad->FirstText==NULL)
- {
- firstT=NULL;
- lastT=NULL;
- if(WriteText(1)==3) break;
- agad->FirstText=firstT;
- }
- if(DefText(1)) Error(0,1,1);
- break;
- case 5: if(SearchGad()) break;
- if((agad->GadgetType & 3) == 3)
- {
- Error(16,1,0);
- break;
- }
- BType=0;
- if(NewBorDef()) Error(0,1,1);
- break;
- case 6:
- case 7: d=ITEMNUM(code)-6;
- if(SearchGad()) break;
- DefImage(d);
- break;
- case 8: if(awin->FirstGadget)
- PlaceGadget();
- break;
- }
- break;
-
- /* Menu MENU */
- case 3: switch(ITEMNUM(code))
- {
- case 0: MWinOn(WMwin);
- WMwin=NULL;
- MenuWindow.CheckMark=NULL;
- ItemWindow.CheckMark=NULL;
- if(awin->CheckMark)
- {
- helpI=awin->CheckMark;
- MenuWindow.CheckMark=&helpI->Image;
- ItemWindow.CheckMark=&helpI->Image;
- }
- MenuWindow.DetailPen=awin->DetailPen;
- MenuWindow.BlockPen=awin->BlockPen;
- ItemWindow.DetailPen=awin->DetailPen;
- ItemWindow.BlockPen=awin->BlockPen;
- if(awin->MenuStrip)
- ClearMenuStrip(awin->win);
- if(DefMenu()) Error(0,1,1);
- WMOn();
- break;
- case 1: awin->win->Flags ^= RMBTRAP;
- ModifyIDCMP(awin->win,MOUSEBUTTONS);
- MWinOn(WMwin);
- SetMenuStrip(awin->win,&awin->MenuStrip->Menu);
- ActivateWindow(awin->win);
- ok=1;
- while(ok)
- {
- Wait(1L << awin->win->UserPort->mp_SigBit);
- GetMessage(awin->win);
- if(class==MOUSEBUTTONS &&
- code==SELECTDOWN)
- ok=0;
- }
- awin->win->Flags |= RMBTRAP;
- ModifyIDCMP(awin->win,NULL);
- WMOn();
- break;
- case 2: if(Error(20,1,1)==0) break;
- Work();
- DelMenuAll();
- ClearMenuStrip(awin->win);
- ClearMenuStrip(WMwin);
- WMItem5.Flags=ItemOff;
- WMItem5b.Flags=ItemOff;
- SetMenuStrip(WMwin,&WMMenu6);
- Ready();
- break;
- case 3: DefImage(6);
- if(awin->CheckMark)
- CheckItem();
- break;
- }
- break;
-
- /* Menu WINDOW */
- case 2: switch(ITEMNUM(code))
- {
- case 0: if(NewWin(0)) Error(0,1,1);
- else SaveOk=1;
- break;
- case 1: if(NewWinDef()) Error(0,1,1);
- break;
- case 2: clone=1;
- err=CloneWindow();
- clone=0;
- if(err)
- {
- Ready();
- Permit();
- if(err==2) CloseWin(awin);
- Error(0,1,1);
- break;
- }
- break;
- case 3: if(WriteText(0)==1) Error(0,1,1);
- break;
- case 4: if(DefText(0)) Error(0,1,1);
- break;
- }
- break;
-
- /* Menu SCREEN */
- case 1: switch(ITEMNUM(code))
- {
- case 0: if(NewSc()) Error(0,1,1);
- else SaveOk=1;
- break;
- case 1: if(NewScDef()) Error(0,1,1);
- break;
- case 2: if(DefPalette()) Error(0,1,1);
- break;
- }
- break;
-
- /* Menu PROJECT */
- case 0: switch(ITEMNUM(code))
- {
- case 0: if(SaveData(0)==1)
- {
- Ready();
- Error(1,1,1);
- }
- else SaveOk=0;
- if(Datei) Close(Datei);
- break;
- case 1: if(SaveOk)
- {
- if(Error(3,1,1)==0)
- break;
- }
- err=LoadData(0);
- if(Datei) Close(Datei);
- if(err != 2) Ready();
- if(err==1)
- {
- Error(1,1,1);
- ClearAll();
- }
- if(err==3) Error(4,1,1);
- break;
- case 2: if(SaveData(1)==1)
- {
- Ready();
- Error(1,1,1);
- }
- if(Datei) Close(Datei);
- break;
- case 3: err=LoadData(1);
- if(Datei) Close(Datei);
- if(err != 2) Ready();
- if(err==1)
- {
- Error(1,1,1);
- ClearAll();
- }
- if(err==3) Error(4,1,1);
- if(err==4) Error(18,1,1);
- break;
- case 4: if(MakeSource()) Error(0,1,1);
- break;
- case 5: if(Prefs()) Error(0,1,1);
- break;
- case 6: if(SaveOk)
- {
- if(Error(2,1,1)==0)
- break;
- }
- else if(Error(9,1,0)==0)
- break;
- Work();
- ClearAll();
- Ready();
- break;
- case 7: if(SaveOk)
- {
- if(Error(8,1,1)==0)
- break;
- }
- else
- {
- if(Error(7,1,0)==0)
- break;
- }
- EndeWM=FALSE;
- break;
- }
- break;
- } /* switch */
- }
-
- VOID Work()
- {
- ActivateWindow(WMwin);
- SetPointer(WMwin,Wecker,20,15,0,0);
- }
- VOID Ready()
- {
- ClearPointer(WMwin);
- }
- USHORT TestWin(struct MyWindow *w,struct Window *t)
- {
- FW=w;
- while(w)
- {
- if(t == w->win)
- {
- ActivateWindow(WMwin);
- if(w != awin)
- {
- Work();
- awin=w;
- asc=w->Wsc;
- sc=w->Screen;
- vp=&sc->ViewPort;
- firstW=FW;
- WFolge();
- nosc=asc;
- SetNewWin(0);
- ScreenToFront(sc);
- Ready();
- }
- return(1);
- }
- w=w->NextWindow;
- }
- return(0);
- }
- VOID TestWindow()
- {
- ok=1;
- helpS=firstS;
- while(helpS)
- {
- if(TestWin(helpS->FirstWindow,(struct Window *)layer->Window))
- {
- ok=0;
- break;
- }
- helpS=helpS->NextScreen;
- }
- if(ok) TestWin(noscW,(struct Window *)layer->Window);
- }
- VOID SetWD()
- {
- if(awin->LeftEdge != awin->win->LeftEdge)
- {
- awin->LeftEdge=awin->win->LeftEdge;
- NW=1;
- }
- if(awin->TopEdge != awin->win->TopEdge)
- {
- awin->TopEdge=awin->win->TopEdge;
- NW=1;
- }
- if(awin->Width != awin->win->Width)
- {
- NW=1;
- }
- if(awin->Height != awin->win->Height)
- {
- NW=1;
- }
- if(NW)
- {
- SaveOk=1;
- SetNewWin(1);
- }
- }
- VOID TimerStart()
- {
- timereq.tr_time.tv_secs=0;
- timereq.tr_time.tv_micro=2500;
- timereq.tr_node.io_Message.mn_ReplyPort = timerport;
- timereq.tr_node.io_Command=TR_ADDREQUEST;
- timereq.tr_node.io_Flags=0;
- timereq.tr_node.io_Error=0;
- SendIO(&timereq.tr_node);
- }
- VOID CloseAll()
- {
- AbortIO(&timereq.tr_node);
- if(timereq.tr_node.io_Message.mn_ReplyPort) CloseDevice(&timereq);
- if(timerport) DeletePort(timerport);
- FreeFiles();
- ClearAll();
- if(StdFont) CloseFont(StdFont);
- if(WMwin) MWinOn(WMwin);
- if(WMsc) CloseScreen(WMsc);
- if(LayersBase) CloseLibrary(LayersBase);
- if(GfxBase) CloseLibrary(GfxBase);
- if(IntuitionBase) CloseLibrary(IntuitionBase);
- ReqProc->pr_WindowPtr=(APTR)ReqProc->pr_Task.tc_UserData;
- ReqProc->pr_Task.tc_UserData=0;
- }
-
- VOID ClearAll()
- {
- while(firstS)
- {
- CloseAwinAll(firstS->FirstWindow);
- CloseScreen(firstS->sc);
- helpS=firstS->NextScreen;
- FreeMem(firstS,sizeof(struct MyScreen));
- firstS=helpS;
- }
- firstS=NULL;
- lastS=NULL;
- asc=NULL;
- nosc=NULL;
- Sok=0;
- sc=WMsc;
- if(noscW)
- {
- CloseAwinAll(noscW);
- noscW=NULL;
- }
- SaveOk=0;
- MenuOff();
- }
-
- struct Layer *GetMouseLayer()
- {
- register struct Layer *layer = NULL;
- register short mousey = IntuitionBase->MouseY;
- register short mousex = IntuitionBase->MouseX;
- sc = IntuitionBase->FirstScreen;
-
- while(sc)
- {
- if (!(sc->ViewPort.Modes & LACE)) mousey >>= 1;
- if (!(sc->ViewPort.Modes & HIRES)) mousex >>= 1;
- if (layer = (struct Layer *)WhichLayer(&sc->LayerInfo,
- mousex,mousey - sc->ViewPort.DyOffset)) break;
- if (mousey >= sc->ViewPort.DyOffset) break;
- sc=sc->NextScreen;
- }
- return(layer);
- }
-